package 位运算;

public class 判定字符是否唯一6 {
    //https://leetcode.cn/problems/is-unique-lcci/submissions/674303332/
    public boolean isUnique1(String astr) {
        if(astr.length() > 26) return false;
        int a = 0;
        for (int i = 0; i < astr.length(); i++) {
            char c = astr.charAt(i);
            if(((a >> c) & 1) == 1) return false;
            a |= (1 << c);
        }
        return true;
    }
    public boolean isUnique(String astr) {
        // 鸽巢原理优化：
        if(astr.length() > 26) return false;

        int bitMap = 0; // 位图数变量
        for (int i = 0; i < astr.length(); i++) {
            int x = astr.charAt(i) - 'a';
            // 判断字符是否已存在位图中：
            if(((bitMap >> x) & 1) == 1) return false;
            // 把此字符在位图中标记存在：
            bitMap |= (1 << x);
        }
        return true;
    }

}
